package com.liwei.app;

import com.liwei.beans.Stu;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class MyApp {

    public static void main(String[] args) {
        //获取类信息【反射】【几种方法】
        //反射就是把C语言的Class实例信息，转变成java语法的Class对象
        //所有java类型的类是Class
        //1——Class.forName()方法
        //2——Stu.class特殊手法
        //3——stu.getClass()
        Class<Stu> stuClass = Stu.class;
        System.out.println(stuClass.getName());
        //默认只会取得根据java访问修饰符定义的数据
        System.out.println("Stu的所有属性...................");
        Field[] fields = stuClass.getFields();
        for (Field field : fields) {
            System.out.println(field);
        }
        System.out.println("Stu的所有方法...................");
        Method[] methods = stuClass.getMethods();
        for (Method method : methods) {
            System.out.println(method);
        }
        System.out.println("Stu的所有构造...................");
        Constructor<?>[] constructors = stuClass.getConstructors();
        for (Constructor<?> constructor : constructors) {
            System.out.println(constructor);
        }
        System.out.println("*******************公开Stu定义的所有属性和方法***********************************");

//使用getDeclaredXXXX取得定义的信息
        System.out.println("Stu的所有属性...................");
         fields = stuClass.getDeclaredFields();
        for (Field field : fields) {
            //放开权限[忽略访问修饰符]
            field.setAccessible(true);
            System.out.println(field);
        }
        System.out.println("Stu的所有方法...................");
         methods = stuClass.getDeclaredMethods();
        for (Method method : methods) {
            //放开权限[忽略访问修饰符]
            method.setAccessible(true);
            System.out.println(method);
        }
        System.out.println("Stu的所有构造...................");
        constructors = stuClass.getDeclaredConstructors();
        for (Constructor<?> constructor : constructors) {
            //放开权限[忽略访问修饰符]
            constructor.setAccessible(true);
            System.out.println(constructor);
        }

    }
}
